iT邦幫忙

2024 iThome 鐵人賽

DAY 16
1

QR Code 簡介

QRCode(Quick Response Code 快速反應碼)是由日本公司 Denso Wave 的 原昌宏 先生在 1994 年發明的二維條碼技術。這項技術最初是為了在汽車製造過程中高效地追蹤零部件。與傳統的一維條碼相比,QRCode 可以儲存更多資訊,並且可以從任何角度快速掃描。

發展歷史

  1. 初期發展(1990年代):

    • 1994年:QRCode 發明,目的是提高汽車零部件的追蹤效率。
    • 1997年:QRCode 成為 Denso Wave 的註冊商標,但該公司選擇不對技術進行專利保護,這促進了 QRCode 在全球的快速普及。

2.普及階段(2000年代):

  • 2000年代初:QRCode 開始在日本以外的國家使用,應用範圍擴展至製造業、物流和零售業。
  • 2002年:智慧型手機普及,QRCode 進一步拓展至行動支付、行銷和資訊共享領域。
  1. 全球應用(2010年代至今):

    • 2010年代:QRCode 在全球廣泛應用,特別是在亞洲,QRCode 被廣泛使用於行動支付、行銷、產品追溯等領域。
    • COVID-19疫情期間:QRCode 技術因其非接觸式的特性,被廣泛應用於入場登記、疫苗接種紀錄以及防疫信息的傳遞。

技術概述

QRCode 是一種矩陣型的二維條碼,由黑白兩色的方塊組成,採用 Reed-Solomon 錯誤校正算法,能夠在部分損毀的情況下仍然正確讀取資料。

  1. 編碼容量:

QRCode 可以編碼數字、字母、二進位資料和漢字等,最大資料容量約為 7089 個數字、4296 個字母或 1817 個漢字。

  1. 結構:
  • 定位圖形:QRCode 的每個角落都有一個大型的方形圖形,用於定位和對齊。
  • 格式信息:包含錯誤校正級別和遮罩模式的信息,用於提高解碼的準確性。
  • 資料區域:儲存編碼的資料和錯誤校正資料。
  • 錯誤校正:
    • QRCode 提供四種錯誤校正級別(L、M、Q、H),用戶可以根據需求選擇。最高級別的錯誤校正能夠容忍高達 30% 的損毀,仍可正確讀取資料。
    • QRCode 以其高效儲存能力、強大的容錯性及快速掃描的優勢,成為全球廣泛應用的二維條碼技術,並被廣泛應用於各個領域。

MicroPython 的產生 QRCode 模組

我們從 Github 上來找 MicroPython 的 QRCode 相關模組,可以找到底下這個專案:

專案是這樣介紹的:

它是從 Python-qrcode 這個模組分支出來的,已經用 MicroPython 語法移植成功。為了運作在執行 MicroPython 這類硬體資源較缺乏的嵌入式設備上,函式庫不是產生圖片,而只是產生 ** bitmap-style matrices(點鎮圖樣式的矩陣)**,會把你的資料編碼成一個 QRCode 的像素矩陣,這樣可以存入到 FrameBuffer 中。

作者對其做了一些改進

  • 刪除 MicroPython 中不可使用的 Python 函式庫。
  • 重寫 MicroPython 中不可使用的語法。
  • 刪除 Py2/Py3 交叉相容性代碼。(MicroPython 是 Python3 環境)
  • 刪除產生二維碼圖片的程式碼。
  • 將使用遞歸函數產生 QRCode ,改寫為用迴圈方式產生
  • 將所有代碼合併到一個檔中,可輕鬆地部署 MicroPython。

程式運作的效果

因此您只要下載專案中的 uQR.oy 檔案,上傳至 WiFiBoy 玩學機 Flash 中的 lib 目錄下,即可引用這個模組來產生 QR-Code

程式碼

我們利用產出 QR-CODE 的功能,為我們這次的鐵人賽貼文,做個QR-CODE 吧。

from lib.uQR import QRCode

wb.cls()

qr = QRCode()
# qr.add_data('https://www.wifiboy.org')
qr.add_data('https://ithelp.ithome.com.tw/users/20105707/ironman/7110')
matrix = qr.get_matrix()
print(len(matrix))

QR_COLOR = wb.WHITE
BG_COLOR = wb.BLACK  

W = 160
H = 128

wb.cls(BG_COLOR)

for y in range(len(matrix)):
    for x in range(len(matrix[y])):
        color = QR_COLOR if matrix[y][x] else BG_COLOR
        wb.pix(x * 2, y * 2, color) 
    print(x * 1, y * 1 )

wb.box(0, H - 20, W, H, BG_COLOR)
wb.str("QR Code", 5, H - 15, 2, 2)

執行效果:

參考資料

  1. QRCode
  2. 原昌宏
  3. uQR
  4. 產生 QRCode ( 個性化 QRCode )

上一篇
15. 控制 LCD1602 液晶顯示器
下一篇
17. 讀寫 SD 卡
系列文
使用 WiFiBoy Python 玩學機來學物聯網應用 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言